//#define _CRT_SECURE_NO_WARNINGS 1


//此处的题解只是为动态的开辟空间，直接定义出来数组的大小会更加简单
//并且这个函数还有改进的余地，只保存一行，然后后面的行都根据前面的行打印出来。但这样做的缺点是无法进行查询
// 
// 
//#include <stdio.h>
//#include <stdlib.h>
//
//// 动态创建n行的杨辉三角，返回二维数组
//int** generate_pascal_triangle(int n) {
//    int** triangle = (int**)malloc(n * sizeof(int*));
//
//    // 分配每一行的空间
//    for (int i = 0; i < n; i++) {
//        triangle[i] = (int*)malloc((i + 1) * sizeof(int));
//    }
//
//    // 初始化第一列和对角线上的元素为1
//    for (int i = 0; i < n; i++) {
//        triangle[i][0] = 1;
//        triangle[i][i] = 1;
//    }
//
//    // 生成杨辉三角的其他元素
//    for (int i = 2; i < n; i++) {
//        for (int j = 1; j < i; j++) {
//            triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
//        }
//    }
//
//    return triangle;
//}
//
//// 释放动态分配的二维数组的内存
//void free_pascal_triangle(int** triangle, int n) {
//    for (int i = 0; i < n; i++) {
//        free(triangle[i]);
//    }
//    free(triangle);
//}
//
//// 示例调用
//int main() {
//    int n = 0;
//    printf("请输出要生成的行数:");
//    scanf("%d", &n);
//    int** result = generate_pascal_triangle(n);
//
//    // 打印杨辉三角
//    for (int i = 0; i < n; i++) {
//        for (int j = 0; j <= i; j++) {
//            printf("%d ", result[i][j]);
//        }
//        printf("\n");
//    }
//
//    // 释放内存
//    free_pascal_triangle(result, n);
//
//    return 0;
//}